home *** CD-ROM | disk | FTP | other *** search
- /* Icons.c- icon preferences
- *
- * WPrefs - Window Maker Preferences Program
- *
- * Copyright (c) 1998 Alfredo K. Kojima
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
- * USA.
- */
-
-
- #include "WPrefs.h"
-
-
- typedef struct _Panel {
- WMFrame *frame;
-
- char *sectionName;
-
- char *description;
-
- CallbackRec callbacks;
-
- WMWindow *win;
-
- WMFrame *posF;
- WMFrame *posVF;
- WMFrame *posV;
-
- WMButton *posB[8];
-
- WMFrame *animF;
- WMButton *animB[4];
-
- WMFrame *optF;
- WMButton *arrB;
- WMButton *omnB;
-
- WMFrame *sizeF;
- WMPopUpButton *sizeP;
-
- int iconPos;
- } _Panel;
-
-
-
- #define ICON_FILE "iconprefs"
-
-
- static void
- showIconLayout(WMWidget *widget, void *data)
- {
- _Panel *panel = (_Panel*)data;
- int w, h;
- int i;
-
- for (i=0; i<8; i++) {
- if (panel->posB[i] == widget) {
- panel->iconPos = i;
- break;
- }
- }
-
- if (panel->iconPos & 1) {
- w = 32;
- h = 8;
- } else {
- w = 8;
- h = 32;
- }
- WMResizeWidget(panel->posV, w, h);
-
- switch (panel->iconPos & ~1) {
- case 0:
- WMMoveWidget(panel->posV, 2, 2);
- break;
- case 2:
- WMMoveWidget(panel->posV, 95-2-w, 2);
- break;
- case 4:
- WMMoveWidget(panel->posV, 2, 70-2-h);
- break;
- default:
- WMMoveWidget(panel->posV, 95-2-w, 70-2-h);
- break;
- }
- }
-
-
- #define MIN(a,b) ((a) < (b) ? (a) : (b))
-
- static void
- showData(_Panel *panel)
- {
- int i;
- char *str;
- char *def = "blh";
-
- WMSetButtonSelected(panel->arrB, GetBoolForKey("AutoArrangeIcons"));
-
- WMSetButtonSelected(panel->omnB, GetBoolForKey("StickyIcons"));
-
- str = GetStringForKey("IconPosition");
- if (!str)
- str = def;
- if (strlen(str)!=3) {
- wwarning("bad value %s for option IconPosition. Using default blh",
- str);
- str = def;
- }
-
- if (str[0]=='t' || str[0]=='T') {
- i = 0;
- } else {
- i = 4;
- }
- if (str[1]=='r' || str[1]=='R') {
- i += 2;
- }
- if (str[2]=='v' || str[2]=='V') {
- i += 0;
- } else {
- i += 1;
- }
- panel->iconPos = i;
- WMPerformButtonClick(panel->posB[i]);
-
- i = GetIntegerForKey("IconSize");
- i = (i-24)/8;
-
- if (i<0)
- i = 0;
- else if (i>9)
- i = 9;
- WMSetPopUpButtonSelectedItem(panel->sizeP, i);
-
- str = GetStringForKey("IconificationStyle");
- if (!str)
- str = "zoom";
- if (strcasecmp(str, "none")==0)
- WMPerformButtonClick(panel->animB[3]);
- else if (strcasecmp(str, "twist")==0)
- WMPerformButtonClick(panel->animB[1]);
- else if (strcasecmp(str, "flip")==0)
- WMPerformButtonClick(panel->animB[2]);
- else {
- WMPerformButtonClick(panel->animB[0]);
- }
- }
-
-
-
-
- static void
- createPanel(Panel *p)
- {
- _Panel *panel = (_Panel*)p;
- WMColor *color;
- int i;
- char buf[16];
-
- panel->frame = WMCreateFrame(panel->win);
- WMResizeWidget(panel->frame, FRAME_WIDTH, FRAME_HEIGHT);
- WMMoveWidget(panel->frame, FRAME_LEFT, FRAME_TOP);
-
- /***************** Positioning of Icons *****************/
- panel->posF = WMCreateFrame(panel->frame);
- WMResizeWidget(panel->posF, 260, 135);
- WMMoveWidget(panel->posF, 25, 10);
- WMSetFrameTitle(panel->posF, _("Icon Positioning"));
-
- for (i=0; i<8; i++) {
- panel->posB[i] = WMCreateButton(panel->posF, WBTOnOff);
- WMSetButtonAction(panel->posB[i], showIconLayout, panel);
-
- if (i>0)
- WMGroupButtons(panel->posB[0], panel->posB[i]);
- }
- WMMoveWidget(panel->posB[1], 70, 23);
- WMResizeWidget(panel->posB[1], 47, 15);
- WMMoveWidget(panel->posB[3], 70+47, 23);
- WMResizeWidget(panel->posB[3], 47, 15);
-
- WMMoveWidget(panel->posB[0], 55, 38);
- WMResizeWidget(panel->posB[0], 15, 35);
- WMMoveWidget(panel->posB[4], 55, 38+35);
- WMResizeWidget(panel->posB[4], 15, 35);
-
- WMMoveWidget(panel->posB[5], 70, 38+70);
- WMResizeWidget(panel->posB[5], 47, 15);
- WMMoveWidget(panel->posB[7], 70+47, 38+70);
- WMResizeWidget(panel->posB[7], 47, 15);
-
- WMMoveWidget(panel->posB[2], 70+95, 38);
- WMResizeWidget(panel->posB[2], 15, 35);
- WMMoveWidget(panel->posB[6], 70+95, 38+35);
- WMResizeWidget(panel->posB[6], 15, 35);
-
- color = WMCreateRGBColor(WMWidgetScreen(panel->win), 0x5100, 0x5100,
- 0x7100, True);
- panel->posVF = WMCreateFrame(panel->posF);
- WMResizeWidget(panel->posVF, 95, 70);
- WMMoveWidget(panel->posVF, 70, 38);
- WMSetFrameRelief(panel->posVF, WRSunken);
- WMSetWidgetBackgroundColor(panel->posVF, color);
- WMReleaseColor(color);
-
- panel->posV = WMCreateFrame(panel->posVF);
- WMSetFrameRelief(panel->posV, WRSimple);
-
- WMMapSubwidgets(panel->posF);
-
- /***************** Animation ****************/
- panel->animF = WMCreateFrame(panel->frame);
- WMResizeWidget(panel->animF, 205, 135);
- WMMoveWidget(panel->animF, 295, 10);
- WMSetFrameTitle(panel->animF, _("Iconification Animation"));
-
- for (i=0; i<4; i++) {
- panel->animB[i] = WMCreateRadioButton(panel->animF);
- WMResizeWidget(panel->animB[i], 170, 20);
- WMMoveWidget(panel->animB[i], 20, 24+i*25);
- }
- WMGroupButtons(panel->animB[0], panel->animB[1]);
- WMGroupButtons(panel->animB[0], panel->animB[2]);
- WMGroupButtons(panel->animB[0], panel->animB[3]);
-
- WMSetButtonText(panel->animB[0], _("Shrinking/Zooming"));
- WMSetButtonText(panel->animB[1], _("Spinning/Twisting"));
- WMSetButtonText(panel->animB[2], _("3D-flipping"));
- WMSetButtonText(panel->animB[3], _("None"));
-
- WMMapSubwidgets(panel->animF);
-
- /***************** Options ****************/
- panel->optF = WMCreateFrame(panel->frame);
- WMResizeWidget(panel->optF, 260, 70);
- WMMoveWidget(panel->optF, 25, 150);
- /* WMSetFrameTitle(panel->optF, _("Icon Display"));*/
-
- panel->arrB = WMCreateSwitchButton(panel->optF);
- WMResizeWidget(panel->arrB, 235, 20);
- WMMoveWidget(panel->arrB, 15, 15);
- WMSetButtonText(panel->arrB, _("Auto-arrange icons"));
-
- WMSetBalloonTextForView(_("Keep icons and miniwindows arranged all the time."),
- WMWidgetView(panel->arrB));
-
- panel->omnB = WMCreateSwitchButton(panel->optF);
- WMResizeWidget(panel->omnB, 235, 20);
- WMMoveWidget(panel->omnB, 15, 40);
- WMSetButtonText(panel->omnB, _("Omnipresent miniwindows"));
-
- WMSetBalloonTextForView(_("Make miniwindows be present in all workspaces."),
- WMWidgetView(panel->omnB));
-
- WMMapSubwidgets(panel->optF);
-
- /***************** Icon Size ****************/
- panel->sizeF = WMCreateFrame(panel->frame);
- WMResizeWidget(panel->sizeF, 205, 70);
- WMMoveWidget(panel->sizeF, 295, 150);
- WMSetFrameTitle(panel->sizeF, _("Icon Size"));
-
- WMSetBalloonTextForView(_("The size of the dock/application icon and miniwindows"),
- WMWidgetView(panel->sizeF));
-
- panel->sizeP = WMCreatePopUpButton(panel->sizeF);
- WMResizeWidget(panel->sizeP, 156, 20);
- WMMoveWidget(panel->sizeP, 25, 30);
- for (i=24; i<=96; i+=8) {
- sprintf(buf, "%ix%i", i, i);
- WMAddPopUpButtonItem(panel->sizeP, buf);
- }
-
- WMMapSubwidgets(panel->sizeF);
-
- WMRealizeWidget(panel->frame);
- WMMapSubwidgets(panel->frame);
-
- showData(panel);
- }
-
-
- static void
- storeData(_Panel *panel)
- {
- char buf[8];
-
- SetBoolForKey(WMGetButtonSelected(panel->arrB), "AutoArrangeIcons");
- SetBoolForKey(WMGetButtonSelected(panel->omnB), "StickyIcons");
-
- SetIntegerForKey(WMGetPopUpButtonSelectedItem(panel->sizeP)*8+24,
- "IconSize");
-
- buf[3] = 0;
-
- if (panel->iconPos < 4) {
- buf[0] = 't';
- } else {
- buf[0] = 'b';
- }
- if (panel->iconPos & 2) {
- buf[1] = 'r';
- } else {
- buf[1] = 'l';
- }
- if (panel->iconPos & 1) {
- buf[2] = 'h';
- } else {
- buf[2] = 'v';
- }
- SetStringForKey(buf, "IconPosition");
-
- if (WMGetButtonSelected(panel->animB[0]))
- SetStringForKey("zoom", "IconificationStyle");
- else if (WMGetButtonSelected(panel->animB[1]))
- SetStringForKey("twist", "IconificationStyle");
- else if (WMGetButtonSelected(panel->animB[2]))
- SetStringForKey("flip", "IconificationStyle");
- else
- SetStringForKey("none", "IconificationStyle");
- }
-
-
-
- Panel*
- InitIcons(WMScreen *scr, WMWindow *win)
- {
- _Panel *panel;
-
- panel = wmalloc(sizeof(_Panel));
- memset(panel, 0, sizeof(_Panel));
-
- panel->sectionName = _("Icon Preferences");
-
- panel->description = _("Icon/Miniwindow handling options. Icon positioning\n"
- "area, sizes of icons, miniaturization animation style.");
-
- panel->win = win;
-
- panel->callbacks.createWidgets = createPanel;
- panel->callbacks.updateDomain = storeData;
-
- AddSection(panel, ICON_FILE);
-
- return panel;
- }
-